#include <iostream>
using namespace std;
#include <memory>

class Person
{
public:
    Person()
    {
        cout << "Person()" << endl;
    }
    ~Person()
    {
        cout << "~Person()" << endl;
    }
public:
    void run()
    {
        cout << "Person run()" <<  endl;
    }
private:
    int m_age;
    char *m_name;
};

/* 模板*/
template <typename T>
class smartPtr//智能指针的类
{
public:
    smartPtr(T * obj)
    {
        ptr = obj;
        cout << "smartPtr()" << endl;
    }
    ~smartPtr()
    {
        delete ptr;
        cout << "~smartPtr()" << endl;
    }
public:
    T * operator->()
    {
        return ptr;
    }
private:
    T *ptr;

};


int main()
{
    // {
    //     Person *p2 = new Person[3];
    //     p2->run();
    //     delete []p2;//只有调用了delete才会调用析构
    // }

    // {
    //     /* auto_ptr的使用 , 不适用于数组*/
    //     auto_ptr<Person> p1(new Person);
    //     p1->run();
    // }

    // {
    //     /* auto_ptr的使用 */
    //     smartPtr<Person> p1(new Person);
    //     p1->run();
    // }

    {
        // shared_ptr<Person> p1(new Person);
        // p1->run();
        
        /* 适用于数组*/
        shared_ptr<Person[]> p2(new Person[3]{});
    }

    return 0;
}